/**
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * $Id$ Vendedor.java
 * Universidad de los Andes (Bogotá - Colombia)
 * Departamento de Ingeniería de Sistemas y Computación
 * Licenciado bajo el esquema Academic Free License version 2.1
 *
 * Ejercicio: Muebles los Alpes
 * Autor: Camilo Alvarez
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
package com.losalpes.catalogo.entities;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * Clase que modela un vendedor dentro del sistema.
 * @author Camilo Alvarez
 */
@Entity
@Table(name = "Vendedor")
@NamedQueries({
    @NamedQuery(name = "Vendedor.findAll", query = "SELECT v FROM Vendedor v")
})
public class Vendedor implements Serializable {

    private static final long serialVersionUID = 1L;

    // -----------------------------------------------------
    // Atributos
    // -----------------------------------------------------

    /**
     * Identificador del vendedor
     */
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="Sec_Vendedor")
    @SequenceGenerator(name="Sec_Vendedor", sequenceName="Sec_Vendedor", allocationSize=1)
    @Column(name = "identificacion")
    private Long identificacion;

    /**
     * Nombres del vendedor.
     */
    @Basic(optional = false)
    @Column(name = "nombres", nullable=false)
    private String nombres;

    /**
     * Apellidos del vendedor.
     */
    @Basic(optional = false)
    @Column(name = "apellidos", nullable=false)
    private String apellidos;

    /**
     * Lista de ítems de experiencia del vendedor.
     */
    @OneToMany(mappedBy="vendedor")
    private List<ExperienciaVendendor> experiencia;

    /**
     * Salario del vendedor.
     */
    @Basic(optional = false)
    @Column(name = "salario", nullable=false)
    private double salario;

    /**
     * Comisión por ventas para el vendedor.
     */
    @Basic(optional = false)
    @Column(name = "comisionVentas", nullable=false)
    private double comisionVentas;

    /**
     * Perfil de vendedor.
     */
    @Basic(optional = false)
    @Column(name = "perfil", nullable=false)
    private String perfil;

    /**
     * Foto del vendedor.
     */
    @Basic(optional = true)
    @Column(name = "foto", nullable=true)
    private byte[] foto;

    // -----------------------------------------------------
    // Constructor
    // -----------------------------------------------------

    /**
     * Constructor de la clase. Inicializa los atributos.
     */
    public Vendedor() {
       /* experiencia = new ArrayList<ExperienciaVendendor>();
        for (int i = 0; i < 10; i++) {
            ExperienciaVendendor experienciaVendendor = new ExperienciaVendendor();
            experienciaVendendor.setId(i);
            experienciaVendendor.setNombreEmpesa("Empresa " + i);
            experienciaVendendor.setDescripcion("Descripción " + i);
            experienciaVendendor.setAnio(200 + i);
            experienciaVendendor.setCargo("Cargo " + i);
            experiencia.add(experienciaVendendor);
        }*/
    }

    // -----------------------------------------------------
    // Métodos
    // -----------------------------------------------------

    public Long getIdentificacion() {
        return identificacion;
    }

    public void setIdentificacion(Long identificacion) {
        this.identificacion = identificacion;
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public double getComisionVentas() {
        return comisionVentas;
    }

    public void setComisionVentas(double comisionVentas) {
        this.comisionVentas = comisionVentas;
    }

    public List<ExperienciaVendendor> getExperiencia() {
        return experiencia;
    }

    public void setExperiencia(List<ExperienciaVendendor> experiencia) {
        this.experiencia = experiencia;
    }

    public byte[] getFoto() {
        return foto;
    }

    public void setFoto(byte[] foto) {
        this.foto = foto;
    }

    public String getNombres() {
        return nombres;
    }

    public void setNombres(String nombres) {
        this.nombres = nombres;
    }

    public String getPerfil() {
        return perfil;
    }

    public void setPerfil(String perfil) {
        this.perfil = perfil;
    }

    public double getSalario() {
        return salario;
    }

    public void setSalario(double salario) {
        this.salario = salario;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (identificacion != null ? identificacion.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Mueble)) {
            return false;
        }
        Vendedor other = (Vendedor) object;
        if ((this.identificacion == null && other.identificacion != null) || (this.identificacion != null && !this.identificacion.equals(other.identificacion))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString(){
        return "com.losalpes.catalogo.entities.Vendedor[identificacion=" + identificacion + "]";
    }
}